
\section{类型转换}
\label{typeConv}
在一个表达式中,凡是可以使用整型的地方都可以使用带符号或无符号的字符、短整型或整型位字段,还可以使用枚举类型的对象。如果原始类型的所有值都可用int 类型表示, 则其值将被转换为int 类型;否则将被转换为unsigned int 类型。这一过程称为整型提升(integral promotion) 。

将任何整数转换为某种指定的无符号类型数的方法是:以该无符号类型能够表示的最大值加 1 为模,找出与此整数同余的最小的非负值。在对二的补码表示中,如果该无符号类型 的位模式较窄,这就相当于左截取;如果该无符号类型的位模式较宽,这就相当于对带符号 值进行符号扩展和对无符号值进行 0 填充。 将任何整数转换为带符号类型时,如果它可以在新类型中表示出来,则其值保持不变, 否则它的值同具体的实现有关。 

将一个精度较低的浮点值转换为相同或更高精度的浮点类型时,它的值保持不变。将一个较高精度的浮点类型值转换为较低精度的浮点类型时,如果它的值在可表示范围内,则结果可能是下一个较高或较低的可表示值。如果结果在可表示范围之外,则其行为是未定义的。 


许多运算符都会以类似的方式在运算过程中引起转换,并产生结果类型。其效果是将所有操作数转换为同一公共类型,并以此作为结果的类型。这种方式的转换称为普通算术类型转换。


类型转换顺序：
long double -> double -> float -> integral promotion -> ulong -> long,uint -> int

